// bzoj1258
// 题意：
// 给定了Sierpinski的定义，然后按照定义问你某个分形的编号，
// 问与这个编号的三角形相邻却不包含它的三角形的编号，按字典序输出。
//
// 题解：
// 一个简单的递归就行了。
//
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>

std::string s;
std::vector<std::string> ans;

std::string next(std::string s, int d)
{
	int len = s.size();
	if (len == 1) return "";
	if (s[len - 1] - '0' + d == 3) {
		s[len - 1] = '4';
		return s;
	} else {
		s.resize(len - 1);
		return next(s, d);
	}
}

void print()
{
	std::sort(ans.begin(), ans.end());
	for (int i = 0; i < (int)ans.size(); i++)
		std::cout << ans[i] << '\n';
}

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin >> s;
	int len = s.size();
	if (s[len - 1] == '4') {
		s[len - 1] = '1'; ans.push_back(s);
		s[len - 1] = '2'; ans.push_back(s);
		s[len - 1] = '3'; ans.push_back(s);
		print();
		return 0;
	}
	for (int i = 0; i < 3; i++) {
		std::string t = next(s, i);
		if (!t.empty()) ans.push_back(t);
	}
	print();
}

